You Aren't Gonna Need It
   HOME

TheInfoList



OR:

"You aren't gonna need it" (YAGNI) is a principle which arose from
extreme programming Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,"Human Centred Technology Workshop 2006 ", 2006, PD ...
(XP) that states a
programmer A computer programmer, sometimes referred to as a software developer, a software engineer, a programmer or a coder, is a person who creates computer programs — often for larger computer software. A programmer is someone who writes/creates ...
should not add functionality until deemed necessary. Other forms of the phrase include "You aren't going to need it" (YAGTNI) and "You ain't gonna need it" (YAGNI). XP co-founder
Ron Jeffries Ron Jeffries (born December 26, 1939) is one of the three founders of the Extreme Programming (XP) software development methodology circa 1996, along with Kent Beck and Ward Cunningham. He was from 1996, an XP coach on the Chrysler Comprehensi ...
has written: "Always implement things when you actually need them, never when you just foresee that you need them."
John Carmack John D. Carmack II (born August 20, 1970) is an American computer programmer and video game developer. He co-founded the video game company id Software and was the lead programmer of its 1990s games ''Commander Keen'', ''Wolfenstein 3D'', ''Doo ...
has written "It is hard for less experienced developers to appreciate how rarely architecting for future requirements / applications turns out net-positive."


Context

YAGNI is a principle behind the XP practice of "do the simplest thing that could possibly work" (DTSTTCPW). It is meant to be used in combination with several other practices, such as continuous
refactoring In computer programming and software design, code refactoring is the process of restructuring existing computer code—changing the '' factoring''—without changing its external behavior. Refactoring is intended to improve the design, structu ...
, continuous automated
unit testing In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&md ...
, and continuous integration. Used without continuous refactoring, it could lead to disorganized code and massive rework, known as
technical debt In software development, technical debt (also known as design debt or code debt) is the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer. Analogous with ...
. YAGNI's dependency on supporting practices is part of the original definition of XP.


See also

*
Don't repeat yourself "Don't repeat yourself" (DRY) is a principle of software development aimed at reducing repetition of software patterns, replacing it with abstractions or using data normalization to avoid redundancy. The DRY principle is stated as "Every piece o ...
*
Feature creep Feature creep is the excessive ongoing expansion or addition of new features in a product, especially in computer software, video games and consumer and business electronics. These extra features go beyond the basic function of the product and ...
* If it ain't broke, don't fix it *
KISS principle KISS, an acronym for "Keep it simple, stupid!", is a design principle noted by the U.S. Navy in 1960. First seen partly in American English by at least 1938, the KISS principle states that most systems work best if they are kept simple rather tha ...
*
Minimum viable product A minimum viable product (MVP) is a version of a product with just enough features to be usable by early customers who can then provide feedback for future product development. A focus on releasing an MVP means that developers potentially avoid ...
*
MoSCoW method The MoSCoW method is a prioritization technique used in management, business analysis, project management, and software development to reach a common understanding with stakeholders on the importance they place on the delivery of each requireme ...
*
Muntzing Muntzing is the practice and technique of reducing the components inside an electronic appliance to the minimum required for it to function. The term is named after the man who invented it, Earl "Madman" Muntz, a car and electronics salesman who was ...
*
Overengineering Overengineering (or over-engineering), is the act of designing a product or providing a solution to a problem in an elaborate or complicated manner, where a simpler solution can be demonstrated to exist with the same efficiency and effectiveness as ...
*
Single-responsibility principle The single-responsibility principle (SRP) is a computer programming principle that states that "A module should be responsible to one, and only one, actor." The term actor refers to a group (consisting of one or more stakeholders or users) that ...
*
SOLID Solid is one of the State of matter#Four fundamental states, four fundamental states of matter (the others being liquid, gas, and Plasma (physics), plasma). The molecules in a solid are closely packed together and contain the least amount o ...
*
Unix philosophy The Unix philosophy, originated by Ken Thompson, is a set of cultural norms and philosophical approaches to minimalist, modular software development. It is based on the experience of leading developers of the Unix operating system. Early Unix de ...
*
Worse is better Worse is better (also called the New Jersey style) is a term conceived by Richard P. Gabriel in an essay of the same name to describe the dynamics of software acceptance. It refers to the argument that software quality does not necessarily increa ...


References

{{Reflist, refs= ''Extreme Programming Installed'', Ronald E. Jeffries, Ann Anderson, Chet Hendrickson, 2001, 265 pages, p. 190, webpage:
Books-Google-dIsC
quote: "YAGNI: 'You Aren't Gonna Need It.' This slogan, one of XP's most famous..., reminds us always to work on the story we have, not something we think we're going to need."
''Extreme Programming examined'', Giancarlo Succi, Michele Marchesi, 2001, 569 pages, webpage:
Books-Google-VSCh
quote: "XP says 'do the simplest thing that could possibly work ' because 'you aren't gonna need it'."
{{cite book , editor1=Lowell Lindstrom , editor2=Carmen Zannier , editor3=Erdogmus, Hakan , title =Extreme Programming and Agile Methods – XP/Agile Universe 2004: 4th Conference on Extreme Programming and Agile Methods , series=Lecture Notes in Computer Science , publisher=Springer , location=Berlin , year=2004 , page=121 , isbn=3-540-22839-X ''Object-oriented & classical software engineering'', Stephen R. Schach, 2007, 618 pages, p., webpage:
Book-Google-hWwh
quote: "Two acronyms now associated with extreme programming are YAGNI (you aren't gonna need it) and DTSTTCPW (do the simplest thing that could possibly work)."
{{cite web , url=http://ronjeffries.com/xprog/articles/practices/pracnotneed/ , title= You're NOT gonna need it! , access-date=2007-11-07, date=April 4, 1998 , author=Ron Jeffries Martin Fowler;
Kent Beck Kent Beck (born 1961) is an American software engineer and the creator of extreme programming, a software development methodology that eschews rigid formal specification for a collaborative and iterative design process. Beck was one of the 17 ori ...
(8 July 1999). ''Refactoring: Improving the Design of Existing Code''. Addison-Wesley Professional, 431 pages, p. 68, webpage:
BGoogle-1M
{{ISBN, 978-0201485677. Quote: "you aren't going to need it".
Mary Poppendieck; Tom Poppendieck (2003). ''Lean Software Development: An Agile Toolkit'', p.59, webpage:
BGoogle-hQ
Quote: "
Kent Beck Kent Beck (born 1961) is an American software engineer and the creator of extreme programming, a software development methodology that eschews rigid formal specification for a collaborative and iterative design process. Beck was one of the 17 ori ...
, ''Extreme Programming Explained'', Chapter 17, uses the acronym YAGNI (You Aren't Going to Need It) for this practice and explains its rationale."
Russ Olsen (2007). ''Design Patterns in Ruby'', p.13, webpage:

{{ISBN, 9780321490452. Quote: "This design principle comes out of the Extreme Programming world and is elegantly summed up by the phrase You Ain't Gonna Need It (YAGNI for short)."
Software development philosophies Programming principles